package com.myproject.classload;

public class Start {

    public static void main(String[] args) throws Exception {

        //本包旨在搞清楚静态变量、静态代码块、代码块、构造方法的加载顺序
        //情况1. 不加载：只使用类的class对象情况下，以上四个都不会加载
        //System.out.println(Teacher.class);

        //情况2.静态加载：只使用静态变量、静态方法而不实例化类的情况下，会加载静态变量、静态代码块，加载顺序：静态变量>静态代码块
        //同类中静态变量加载顺序从上到下
        //Teacher.start();

        //情况3.实例化加载：使用构造方法的情况下，会加载静态变量、静态代码块、父类、属性、代码块、构造方法
        //加载顺序：静态变量>静态代码块>父类>属性>代码块>构造方法
        //加载父类时只是隐式的调用了super()父类无参的构造方法，如果在本类进行初始化的构造方法中显式的调用了父类的有参构造方法
        //那么初始化父类时会按照有参的构造方法初始化，注意在本类构造方法中显式的调用父类构造方法必须在构造方法中的第一行
        //Teacher teacher = new Teacher("tom");

        //4.如果父类也有静态变量和静态代码块，会优先加载父类的静态变量和静态代码块，以此类推
        System.out.println(Teacher.mouth);

        //
    }
}
